/*
 * Copyright 2010 Katsunori Koyanagi
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */

package sweezy.anim.impl
{

	internal class SliceAnimation extends AnimationDecoratorBase
	{

		private var _sliceDuration:uint;

		private var _startPosition:uint;

		public function SliceAnimation(manager:AnimationManager, animation:AnimationBase, startPosition:uint, sliceDuration:uint)
		{
			super(manager, animation);

			_startPosition = startPosition;
			_sliceDuration = sliceDuration;
		}

		override public function get parameters():Object
		{
			return {startPosition: _startPosition, sliceDuration: _sliceDuration};
		}

		override protected function get animationName():String
		{
			return "Slice";
		}

		override protected function onInitializeInternal():void
		{
			_targetAnimation.initialize();

			if (_startPosition > _targetAnimation._duration)
			{
				_startPosition = _targetAnimation._duration;
			}
			if (_startPosition + _sliceDuration > _targetAnimation._duration)
			{
				_sliceDuration = _targetAnimation._duration - _startPosition;
			}

			_duration = _sliceDuration;
		}

		override protected function onUpdateInternal():void
		{
			_targetAnimation.position = _startPosition + _position;
		}
	}
}
